package com.zhoux.api.io.io;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author taoyi
 * @version 1.0
 * @date 2021/3/26 9:43
 *
 *  本类用于测试 java io
 *  java io 可以让我们用标准的读写操作来完成对不同设备的读写操作,
 *  java 将IO 按照方向划分为输入与输出, 参照点是我们的程序,
 *  输入: 用来读取数据的, 是从外界到程序的方向, 用于获取数据.
 *  输入: 用来写出数据的, 是从程序到外界的方向, 用于发送数据.
 *  java将 IO 比喻为 "流", 即: stream. 就像生活中的 "电流", " 水流" 一样, 它是以不同的方向顺序移动的过程, 只不过这里流动的是字节(二进制数据)
 *  所以在 IO 中有输入流和输出流之分, 我们理解他们是连接程序与另一端的 "管道", 用于获取或发发送数据到另一端.
 *
 *  java 定义了两个超类(抽象类)
 *  java.io.InputStream: 所有字节输入流的超类, 其中定义了读取数据的方法, 因此将来不管读取的是什么设备(连接该设备的流)都有这些读取的方法,
 *  因此我们可以用相同的方法读取不同设备中的数据.
 *  java.io.OutputStream: 所有字节输出流的超类, 其中定义了写出数据的方法.
 *
 *  文件流
 *  文件流是一对低级流, 用于连接程序与文件(硬盘)的 "管道", 负责读写文件数据
 *  java.io.FileOutputStream 和 java.io.FileInputStream
 *
 */
public class FOSDemo {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        /**
         * 构造方法
         *  1、FileOutputStream(File file)
         *  2、FileOutputStream(String path)
         *  以上两种方式创建的文件流是覆盖式,
         *  即: 在创建文件流时若指定的文件已经存在, 则会将该文件原有的内容抹除, 之后通过当前流的内容都会保留在文件中
         *
         *  3、FileOutputStream(File file, boolean append)
         *  3、FileOutputStream(String path, boolean append)
         *  文件流有重载的构造方法, 即: 创建文件流时若指定文件存在, 则原有内容全部保留,
         *  通过当前流写入的新内容都会被顺序追加到文件中。
         */
        try {
            fos = new FileOutputStream(".\\src\\main\\java\\com\\zhoux\\file\\fos.txt",true);
            String line = "和你在成都的街头走一走~~~\n";
            byte[] data = line.getBytes("utf-8");
            fos.write(data);
            String line2 = "直到所有的灯都熄灭了也不停留~~~\n";
            fos.write(line2.getBytes("utf-8"));


            fos.write("你会挽着我的衣袖~~~\n我会把手揣进裤兜~~~\n".getBytes("utf-8"));
            System.out.println("写出完毕~~~");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
